home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 3 / Cream of the Crop 3.iso / utility / mu17_ext.zip / LIBHDR.I < prev    next >
Text File  |  1994-03-07  |  3KB  |  258 lines

  1. **
  2. **    $VER: libhdr.i 1.1 (13.01.1994)
  3. **
  4. **    library header include file
  5. **
  6. **    ⌐ Copyright 1994 by Norbert Pⁿschel
  7. **    All Rights Reserved
  8. **
  9. **    Include & assemble with asm -iINCLUDE:
  10. **
  11.  
  12.     IFND    LIBHDR_I
  13. LIBHDR_I    SET    1
  14.  
  15. * includes
  16.  
  17.     IFND EXEC_TYPES_I
  18.     INCLUDE 'exec/types.i'
  19.     ENDC
  20.     IFND EXEC_LIBRARIES_I
  21.     INCLUDE 'exec/libraries.i'
  22.     ENDC
  23.     IFND EXEC_RESIDENT_I
  24.     INCLUDE 'exec/resident.i'
  25.     ENDC
  26.     IFND EXEC_INITIALIZERS_I
  27.     INCLUDE    'exec/initializers.i'
  28.     ENDC
  29.  
  30. * CALLSYS macro
  31.  
  32. CALLSYS    MACRO
  33.     move.l    A6,-(SP)
  34.     move.l    _SysBase,A6
  35.     jsr    _LVO\1(A6)
  36.     move.l    (SP)+,A6
  37.     ENDM
  38.  
  39. * _LVOs
  40.  
  41. _LVORemove          EQU    -252
  42. _LVOFreeMem         EQU    -210
  43.  
  44. * library code & romtag
  45.  
  46.     SECTION    TEXT,CODE
  47.  
  48. StartCode:
  49.     moveq    #-1,D0
  50.     rts
  51.  
  52. RomTag:
  53.     dc.w    RTC_MATCHWORD
  54.     dc.l    RomTag
  55.     dc.l    EndCode
  56.     dc.b    RTF_AUTOINIT
  57.     dc.b    VER
  58.     dc.b    NT_LIBRARY
  59.     dc.b    PRI
  60.     dc.l    _LibName
  61.     dc.l    _LibID
  62.     dc.l    InitTab
  63.  
  64.     IFND    BASE_SIZE
  65. BASE_SIZE    EQU    LIB_SIZE
  66.     ENDC
  67.  
  68. InitTab:
  69.     dc.l    BASE_SIZE
  70.     dc.l    _FuncTable
  71.     dc.l    _DataTable
  72.     dc.l    _aLibInit
  73.  
  74. _DataTable:
  75.     INITBYTE    LN_TYPE,NT_LIBRARY
  76.     INITLONG    LN_NAME,_LibName
  77.     INITBYTE    LIB_FLAGS,LIBF_SUMUSED!LIBF_CHANGED
  78.     INITWORD    LIB_VERSION,VER
  79.     INITWORD    LIB_REVISION,REV
  80.     INITLONG    LIB_IDSTRING,_LibID
  81.     dc.l        0
  82.  
  83. _aLibInit:
  84.     move.l    A0,_SegList
  85.     move.l    A6,_SysBase
  86.     move.l    D0,_LibBase    ; set global variables
  87.     rts
  88.  
  89.     IFD    GLOBAL
  90.     XREF    _LIBGlobalAlloc
  91.     XREF    _LIBGlobalFree    ; this must not break a Forbid() !!!
  92.     ENDC
  93.  
  94.     IFD    LOCAL
  95.     XREF    _LIBLocalAlloc
  96.     XREF    _LIBLocalFree
  97.     ENDC
  98.  
  99. _aLibOpen:
  100.     IFD    GLOBAL
  101.     tst.l    _InitFlag
  102.     bne.s    1$
  103.     move.l    A6,D0
  104.     jsr    _LIBGlobalAlloc
  105.     tst.l    D0
  106.     beq.s    2$
  107.     move.l    D0,_InitFlag
  108. 1$:
  109.     ENDC
  110.  
  111.     IFD    LOCAL
  112.     move.l    A6,D0
  113.     jsr    _LIBLocalAlloc
  114.     tst.l    D0
  115.     beq.s    2$
  116.     ENDC
  117.  
  118.     move.l    A6,D0
  119.     addq.w    #1,LIB_OPENCNT(A6)
  120.     bclr    #LIBB_DELEXP,LIB_FLAGS(A6)
  121.  
  122. 2$:    rts
  123.  
  124. _aLibClose:
  125.     IFND    LOCAL
  126.     moveq.l    #0,D0
  127.     ENDC
  128.  
  129.     subq.w    #1,LIB_OPENCNT(A6)
  130.  
  131.     IFD    LOCAL
  132.     move.l    A6,D0
  133.     jsr    _LIBLocalFree
  134.     tst.l    D0
  135.     bne.s    1$
  136.     addq.w    #1,LIB_OPENCNT(A6)
  137.     bra.s    2$
  138. 1$:    moveq.l    #0,D0
  139.     tst.w    LIB_OPENCNT(A6)
  140.     ENDC
  141.  
  142.     bne.s    2$
  143.     btst    #LIBB_DELEXP,LIB_FLAGS(A6)
  144.     beq.s    2$
  145.     bsr    _aLibExpunge
  146.  
  147. 2$:    rts
  148.  
  149. _aLibExpunge:
  150.     tst.w    LIB_OPENCNT(A6)
  151.     beq.s    1$
  152.  
  153.     bset    #LIBB_DELEXP,LIB_FLAGS(A6)
  154.     moveq.l    #0,D0
  155.     bra.s    3$
  156.  
  157. 1$:
  158.     IFD    GLOBAL
  159.     tst.l    _InitFlag
  160.     beq.s    2$
  161.     move.l    A6,D0
  162.     jsr    _LIBGlobalFree    ; this must not break the Forbid() !
  163.     tst.l    D0
  164.     bne.s    2$
  165.     bset    #LIBB_DELEXP,LIB_FLAGS(A6)
  166.     bra.s    3$
  167. 2$:
  168.     ENDC
  169.  
  170.     move.l    A6,A1
  171.     CALLSYS    Remove
  172.  
  173.     moveq.l    #0,D0
  174.     move.l    A6,A1
  175.     move.w    LIB_NEGSIZE(A6),D0
  176.     sub.l    D0,A1
  177.     add.w    LIB_POSSIZE(A6),D0
  178.     CALLSYS    FreeMem
  179.  
  180.     move.l    _SegList,D0
  181.  
  182. 3$:    rts
  183.  
  184. _aLibExtFunc:
  185.     moveq.l    #0,D0
  186.     rts
  187.  
  188.     IFD    REXX
  189.  
  190.     XREF    _LIBRexxQuery
  191.  
  192. _aLibRexxQuery:
  193.     link    A5,#-4
  194.     lea    -4(A5),A1
  195.     jsr    _LIBRexxQuery
  196.     move.l    -4(A5),A0
  197.     unlk    A5
  198.     rts
  199.  
  200.     ENDC    
  201.  
  202. EndCode:
  203.  
  204.     SECTION    __MERGED,DATA
  205.  
  206. * LIBRARY macro for generating the function table
  207.  
  208. LIBRARY    MACRO
  209.  
  210. VER    EQU    \2
  211. REV    EQU    \3
  212. PRI    EQU    \4
  213.  
  214.     XDEF    _\5
  215.     XDEF    _SysBase
  216.  
  217. _\5:
  218. _LibBase:
  219.     dc.l    0
  220. _SysBase:
  221.     dc.l    0
  222. _SegList:
  223.     dc.l    0
  224.     IFD    GLOBAL
  225. _InitFlag:
  226.     dc.l    0
  227.     ENDC
  228.  
  229.     dc.b    '$VER: '
  230. _LibID:
  231.     dc.b    \1,' \2.\3 (',\6,')',13,10,0
  232. _LibName:
  233.     dc.b    \1,0
  234.     dc.w    0
  235.  
  236. _FuncTable:
  237.     dc.l    _aLibOpen
  238.     dc.l    _aLibClose
  239.     dc.l    _aLibExpunge
  240.     dc.l    _aLibExtFunc
  241.  
  242.     IFD    REXX
  243.     dc.l    _aLibRexxQuery
  244.     ENDC
  245.  
  246.     ENDM
  247.  
  248. FUNCDEF    MACRO
  249.     XREF    _LIB\1
  250.     dc.l    _LIB\1
  251.     ENDM
  252.  
  253. ENDLIB    MACRO
  254.     dc.l    -1
  255.     ENDM
  256.  
  257.     ENDC    ; LIBHDR_I
  258.